/**
 *   两个数组的比较   内容不能为对象
 * @param {数组1} array
 * @param {数组2} array1
 */
export const arrEquals = (array, array1) => {
  if (!array) return false;

  // compare lengths - can save a lot of time
  if (array1.length != array.length) return false;

  for (var i = 0, l = array1.length; i < l; i++) {
    // Check if we have nested arrays
    if (array1[i] instanceof Array && array[i] instanceof Array) {
      // recurse into the nested arrays
      if (!array1[i].equals(array[i])) return false;
    } else if (array1[i] != array[i]) {
      // Warning - two different object instances will never be equal: {x:20} != {x:20}
      return false;
    }
  }
  return true;
};

/*去重*/

/**
 * 默认数组的去重
 * @param {*} arr
 * @returns { Array } 去重后的数组
 */
export const unique = arr => {
  // 如果支持 Set 那么就直接使用Set去重
  if (Array.hasOwnProperty('from')) {
    return Array.from(new Set(arr));
  } else {
    // 没有的话 就只能遍历去重
    var n = {},
      r = [];
    for (var i = 0; i < arr.length; i++) {
      if (!n[arr[i]]) {
        n[arr[i]] = true;
        r.push(arr[i]);
      }
    }
    return r;
  }
  // 注：上面 else 里面的排重并不能区分 2 和 '2'，但能减少用indexOf带来的性能,暂时没找到替代的方法。。。
  /* 正确排重
    if ( Array.hasOwnProperty('from') ) {
        return Array.from(new Set(arr))
    }else{
        var r = [], NaNBol = true
        for(var i=0; i < arr.length; i++) {
            if (arr[i] !== arr[i]) {
                if (NaNBol && r.indexOf(arr[i]) === -1) {
                    r.push(arr[i])
                    NaNBol = false
                }
            }else{
                if(r.indexOf(arr[i]) === -1) r.push(arr[i])
            }
        }
        return r
    }
 
     */
};

/*求两个集合的并集*/
export const union = (a, b) => {
  var newArr = a.concat(b);
  return this.unique(newArr);
};

/*求两个集合的交集*/
export const intersect = (a, b) => {
  var _this = this;
  a = this.unique(a);
  return this.map(a, function(o) {
    return _this.contains(b, o) ? o : null;
  });
};
